package com.tsy.server.wayline.service;

import com.tsy.server.wayline.model.dto.WaylineJobDTO;
import com.tsy.server.wayline.model.enums.WaylineJobStatusEnum;
import com.tsy.server.wayline.model.param.CreateJobParam;
import com.dji.sdk.common.PaginationData;
import com.tsy.server.wayline.model.param.JobQueryParam;

import java.util.Collection;
import java.util.List;
import java.util.Optional;

/**
 * @author sean
 * @version 1.1
 * @date 2022/6/1
 */
public interface IWaylineJobService {

    /**
     * 在数据库中创建航线任务。
     * @param param 创建参数
     * @param workspaceId   工作空间ID
     * @param username      用户名
     * @param beginTime     任务开始时间（毫秒）
     * @param endTime       任务结束时间（毫秒）
     * @return
     */
    Optional<WaylineJobDTO> createWaylineJob(CreateJobParam param, String workspaceId, Long projectId, String username, Long beginTime, Long endTime);

    /**
     * 根据父任务信息创建子任务。
     * @param workspaceId 工作空间ID
     * @param parentId 父任务ID
     * @return
     */
    Optional<WaylineJobDTO> createWaylineJobByParent(String workspaceId, String parentId);

    /**
     * 按条件查询航线任务。
     * @param workspaceId 工作空间ID
     * @param jobIds 任务ID集合
     * @param status 任务状态
     * @return
     */
    List<WaylineJobDTO> getJobsByConditions(String workspaceId, Collection<String> jobIds, WaylineJobStatusEnum status);

    /**
     * 根据任务ID查询任务信息。
     * @param workspaceId 工作空间ID
     * @param jobId 任务ID
     * @return job information 任务信息
     */
    Optional<WaylineJobDTO> getJobByJobId(String workspaceId, String jobId);

    /**
     * 更新任务数据。
     * @param dto 任务数据
     * @return
     */
    Boolean updateJob(WaylineJobDTO dto);

    /**
     * 分页查询该工作空间下的所有任务。
     * @param projectId 项目ID
     * @return
     */
    PaginationData<WaylineJobDTO> getJobs(Long projectId, JobQueryParam jobQueryParam);

    /**
     * 查询机场的航线执行状态。
     * @param dockSn 机场序列号
     * @return
     */
    WaylineJobStatusEnum getWaylineState(String dockSn);
}
